/**
 * 1.java中使用国际化.

　　国际化即internationalization简称i18n.

　　java中是通过配置文件名为baseName-language-country.properties内容为key-value形式的属性文件来实现国际化的.

　　可以通过Local类来查看java支持那些国家与语言的国际化.

　　Local[] ls=Local.getAvailableLocales();

　　for(Local local:ls){

　　System.out.println(local.getDisplayCountry()+" "+local.getCountry());

　　System.out.println(local.getDisplayLanguage()+" "+local.getLanguage());

　　System.out.println("----------");

　　}

　　根据资源文件获取内容.

　　//获得本地属性

　　Local l=Local.getDefault();

　　//根据本地国家语言来获得classes路径下baseName为message的资源文件

　　ResourceBundle rb=ResourceBundle.getBundle("message",l);

　　//获得key的值

　　String text=rb.getString("username");

　　//可以传入参数,如果资源文件这样定义的话:username={0}用户名

　　String textp=MessageFormat.format(rb.getString("username"),"普通");

　　2.struts2国际化用法

　　先要配置baseName来指定资源文件,可在struts.xml文件中配置.

　　<constant name="struts.custom.i18n.resources" value="message"></constant>

　　然后在classes路劲下添加资源文件.

　　资源文件内容写法.

　　a.不带参数:key=value

　　b.带索引参数:key={0}value{1}

　　c.带表达式参数:key=${username}value 表示从ValueStack中直接获得username变了值,此种方式不需要像(b)那样手动传递参数

　　访问国际化消息.

　　jsp页面:或value1

　　action中:getText()方法

　　3.struts2资源文件的管理

　　有4类资源文件:

　　a.全局范围,在classes路径下.

　　baseName-language-country.properties.如message_zh_CN.properties

　　b.包范围,在包根路径下.

　　package-language-country.properties.如package_zh_CN.properties

　　c.类范围,在该类同一路径下.

　　actionName-language-country.properties.如LoginAction_zh_CN.properties

　　d.临时资源文件,在jsp页面使用标记来指定classes路径下的资源文件.

　　<s:i18n name="message">

　　<s:form.... </s:i18n>
 */
package com.cr.backbone.util;

import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;

/**
 * 国际化资源文件获取工具类
 * @project RaedNote
 * @version 1.0
 * @company
 * @fileDescribe
 * @fileType UtilsI18n.java
 * @author huxh
 * @date 2012-6-5
 */
/**
 * @author huxh
 * 
 */
public class UtilsI18n {
	public static void main(String[] args) {
		showLoacleLanguage();
	}
	
	static Locale localeDefault =Locale.getDefault();//执行一次
	
	/**
	 * 获取当前最新默认语言
	 * @return
	 * @author huxh
	 * @date 2012-6-5
	 */
	public static Locale getCurrentLocale(){
		Locale localeDefault =Locale.getDefault();
		return localeDefault;
	}


	/**
	 * 显示本地支持语言
	 * 
	 * @methodDescribe
	 * @author huxh
	 * @date 2012-6-5
	 */
	public static void showLoacleLanguage() {
		Locale[] ls = Locale.getAvailableLocales();

		for (Locale local : ls) {
			System.out.println(local.getDisplayCountry() + " "
					+ local.getCountry());
			System.out.println(local.getDisplayLanguage() + " "
					+ local.getLanguage());
			System.out.println("----------");
		}
	}

	
	/**
	 * 获取国际化资源
	 * 默认本地语言
	 * @param fileBaseNameUrl	:datadict_zh_CN.properties 中的 datadict 为 BaseName
	 * @param key				:key=value
	 * @return
	 * @author huxh
	 * @date 2012-6-5
	 */
	public static String getI18nString(String fileBaseNameUrl,Locale locale,String key) {
		
		// 根据本地国家语言来获得classes路径下baseName为message的资源文件
		ResourceBundle rb=ResourceBundle.getBundle(fileBaseNameUrl,locale);

		// 获得key的值
		String text=rb.getString(key);
		
		return text;
	}

	/**
	 * 获取参数国际化资源
	 * 默认本地语言
	 * @param fileBaseNameUrl	:datadict_zh_CN.properties 中的 datadict 为 BaseName
	 * @param key				:key=用户：{0}，密码：{1}
	 * @param arguments			:arguments：{'huxh','123'}
	 * @return					:returnStr = '用户：huxh，密码：123' ;
	 * 原理：
	 * 	1、使用国际化工具获取key对应值：用户{0}，密码{1}
	 * 	2、使用MessageFormat，将value与arguments拼接—————— '用户{0}，密码{1}';{'huxh','123'}
	 * 								
	 * @author huxh
	 * @date 2012-6-5
	 */
	public static String getI18nString(String fileBaseNameUrl,Locale locale,String key,Object...arguments) {
		
		// 根据本地国家语言来获得classes路径下baseName为message的资源文件
		ResourceBundle rb=ResourceBundle.getBundle(fileBaseNameUrl,locale);

		// 获得key的值
		String text=rb.getString(key);
		
		// 可以传入参数,如果资源文件这样定义的话:username={0}用户名
		//String textp=MessageFormat.format(text,arguments); // 将获取key的值，{0}用户与参数集合 huxh,拼接成：'huxh用户'返回
		String textp=MessageFormat.format(rb.getString(key),arguments);

		return textp;
	}
	
	
	
	/**
	 * 获取国际化资源
	 * 默认本地语言
	 * @param fileBaseNameUrl
	 * @param key
	 * @return
	 * @author huxh
	 * @date 2012-6-5
	 */
	public static String getI18nStringDefault(String fileBaseNameUrl,String key) {
		// 本地语言
		Locale locale=getCurrentLocale();
		return getI18nString(fileBaseNameUrl, locale, key);
	}

	/**
	 * 获取参数国际化资源
	 * 默认本地语言
	 * @param fileBaseNameUrl
	 * @param key
	 * @param arguments
	 * @return
	 * @author huxh
	 * @date 2012-6-5
	 */
	public static String getI18nStringDefault(String fileBaseNameUrl,String key,Object...arguments) {
		// 本地语言
		Locale locale=getCurrentLocale();
		return getI18nString(fileBaseNameUrl, locale, key ,arguments);
	}

	
	
	
	

}
